﻿namespace Trancity
{
    using Common;
    using Microsoft.DirectX;
    using System;
    using System.Drawing;
    using System.Collections;

    public abstract class BaseStop : MeshObject, MeshObject.IFromFile, IMatrixObject
    {
        public TypeOfTransport typeOfTransport = new TypeOfTransport();
        public Road road;
        private Положение position;
        public double distance;
        public bool serviceStop;

        protected BaseStop()
        {
        }

        public Matrix GetMatrix(int index)
        {
            DoublePoint point = this.road.НайтиКоординаты(this.distance, this.position.отклонение);
            return (Matrix.RotationY(-((float)(this.road.НайтиНаправление(this.distance) - 1.5707963267948966))) * Matrix.Translation((float)point.x, 0f, (float)point.y));
        }

        public void UpdatePosition(World мир)
        {
            if (this.road != null)
            {
                this.position = new Положение(this.road, this.distance, (-this.road.НайтиШирину(this.distance) / 2.0) - 2.4);
                if (this.road is Рельс)
                {
                    foreach (Road дорога in мир.Дороги)
                    {
                        Положение положение = мир.Найти_положение(this.road.НайтиКоординаты(this.distance, 0.0), дорога);
                        if ((положение.Дорога != null) && (положение.отклонение > 0.0))
                        {
                            double num = (-2.4 - положение.отклонение) - (положение.Дорога.НайтиШирину(положение.расстояние) / 2.0);
                            this.position.отклонение = Math.Min(this.position.отклонение, num);
                        }
                    }
                }
            }
        }

        public virtual string Filename
        {
            get
            {
                return "знак.x";
            }
        }

        public int MatricesCount
        {
            get
            {
                DoublePoint point = this.road.НайтиКоординаты(this.distance, this.position.отклонение);
                DoublePoint point2 = new DoublePoint(point.x - MyDirect3D.Camera_Position.x, point.y - MyDirect3D.Camera_Position.z);
                if ((point2.модуль <= 300.0) && !this.serviceStop)
                {
                    return 1;
                }
                return 0;
            }
        }
    }
}

